/* 
 * AgenteComandante.java
 * 
 * Data de criação: 12/10/2010
 * 
 * O2 SOLUTIONS - SOLUÇÕES EM TECNOLOGIA DA INFORMAÇÃO. 
 *
 */
package br.com.o2solutions.siso.integration.entidade;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.o2solutions.core.integration.repository.entity.BaseEntity;

/**
 * Classe responsável por representar o {@link Agente} comandante de uma
 * {@link UnidadeOperacional} registrando a data de início de comando e data
 * fim.Considera-se comando vigente o cadastro o qual a data final do comando
 * seja igual a nulo.
 * 
 * @author osvaldeir
 * @since 12/10/2010
 * 
 */
@Entity
@Table(name = "RLAGENTECOMANDANTE")
@SequenceGenerator(name = "SQAGENTECOMANDANTE", sequenceName = "SQAGENTECOMANDANTE")
public class AgenteComandante extends BaseEntity<Integer> {

	private static final long serialVersionUID = 1L;

	private Agente agente;

	private UnidadeOperacional unidadeOperacional;

	private Date dataInicioComando;

	private Date dataFimComando;

	private String observacao;

	@Id
	@Override
	@Column(name = "AGENTECOMANDANTEID")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SQAGENTECOMANDANTE")
	public Integer getId() {
		return super.getId();
	}

	/**
	 * Retorna o(a) agente.
	 * 
	 * @return Agente
	 */
	@ManyToOne
	@JoinColumn(name = "AGENTEID", nullable = false)
	public Agente getAgente() {
		return agente;
	}

	/**
	 * Atribui o(a) agente.
	 * 
	 * @param agente
	 *            Agente
	 */
	public void setAgente(Agente agente) {
		this.agente = agente;
	}

	/**
	 * Retorna o(a) unidadeOperacional.
	 * 
	 * @return UnidadeOperacional
	 */
	@ManyToOne
	@JoinColumn(name = "UNIDADEID", nullable = false)
	public UnidadeOperacional getUnidadeOperacional() {
		return unidadeOperacional;
	}

	/**
	 * Atribui o(a) unidadeOperacional.
	 * 
	 * @param unidadeOperacional
	 *            UnidadeOperacional
	 */
	public void setUnidadeOperacional(UnidadeOperacional unidadeOperacional) {
		this.unidadeOperacional = unidadeOperacional;
	}

	/**
	 * Retorna o(a) dataInicioComando.
	 * 
	 * @return Date
	 */
	@Temporal(TemporalType.DATE)
	@Column(name = "DATAINICIOCOMANDO", nullable = false)
	public Date getDataInicioComando() {
		return dataInicioComando;
	}

	/**
	 * Atribui o(a) dataInicioComando.
	 * 
	 * @param dataInicioComando
	 *            Date
	 */
	public void setDataInicioComando(Date dataInicioComando) {
		this.dataInicioComando = dataInicioComando;
	}

	/**
	 * Retorna o(a) dataFimComando.
	 * 
	 * @return Date
	 */
	@Temporal(TemporalType.DATE)
	@Column(name = "DATAINICIOCOMANDO", nullable = true)
	public Date getDataFimComando() {
		return dataFimComando;
	}

	/**
	 * Atribui o(a) dataFimComando.
	 * 
	 * @param dataFimComando
	 *            Date
	 */
	public void setDataFimComando(Date dataFimComando) {
		this.dataFimComando = dataFimComando;
	}

	/**
	 * Retorna o(a) observacao.
	 * 
	 * @return String
	 */
	public String getObservacao() {
		return observacao;
	}

	/**
	 * Atribui o(a) observacao.
	 * 
	 * @param observacao
	 *            String
	 */
	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}

}
